package cn.cangfei.massage.service;


import cn.cangfei.massage.dto.param.VisitProductParamDto;
import cn.cangfei.massage.dto.param.VisitProductQueryParam;
import cn.cangfei.massage.dto.update.VisitProductInfo;
import cn.cangfei.massage.entity.VisitProduct;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;


public interface IVisitProductService extends IService<VisitProduct> {

    /**
     * 判断这个产品是否存在
     *
     * @param productId
     * @return
     */
    boolean countProductId(Long productId);

    /**
     * 添加预约产品信息
     *
     * @param openId
     * @param productId
     * @return
     */
    String insert(String openId, Long productId, Integer buycount);

    /**
     * 查看和这个预约编号是否存在
     *
     * @param id
     * @return
     */
    boolean countId(Long id);

    /**
     * 删除预约信息
     *
     * @param id
     * @return
     */
    boolean deleteAppointmentProduct(Long id);

    /**
     * 完成预约产品
     *
     * @param id
     * @return
     */
    boolean AppointmentProductOk(Long id);

    /**
     * 查询预约产品信息
     *
     * @param id
     * @return
     */
    VisitProductInfo getAppointmentProductInfo(Long id);

    /**
     * 分页查询产品信息
     *
     * @param productName
     * @param userName
     * @param pageNum
     * @param pageSize
     * @return
     */
    IPage<VisitProductParamDto> list(String productName, String userName, Integer pageNum, Integer pageSize);

    /**
     * 获取预约列表信息小程序端
     *
     * @param openId
     * @return
     */
    IPage<VisitProductParamDto> getAppointmentListProductInfoByUserId(String openId);

    /**
     * 取消预约产品
     *
     * @param id
     * @return
     */
    boolean AppointmentProductCancel(Long id);

    /**
     * 管理端端查看所有预约产品信息
     *
     * @param param
     * @return
     */
    IPage<VisitProductParamDto> getAppointmentListProductInfo(VisitProductQueryParam param, Integer pageNum, Integer pageSize);

    /**
     * 修改预约的数量
     *
     * @param openId
     * @param productId
     * @param buycount
     * @return
     */
    Boolean updateAppointmentProduct(String openId, Long productId, Integer buycount);

    /**
     * 批量删除预约记录
     *
     * @param type
     * @return
     */
    boolean deleteAppointmentProducts(Integer type);

    /**
     * 删除与productId有关的全部记录
     *
     * @param productId
     */
    void deleteByProductId(Long productId);
}
